/**   
* @Title: CheckUtil.java 
* @Package com.util 
* @Description: TODO(描述CheckUtil类) 
* @author zx583   
* @date 2017年4月15日 下午5:24:17 
* @version V1.0   
*/
package com.zoo.diannaopeijian.common.util;

import org.springframework.util.StringUtils;

import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;

/** 
* @ClassName: CheckUtil 
* @Description: TODO(检查工具类) 
* @author zx583 
* @date 2017年4月15日 下午5:24:17 
*  
*/
public class CheckUtil {
	/** 
	* @Title: nullCheck 
	* @Description: TODO(检查是否含有空值) 
	* @param @param rs
	* @param @param c
	* @param @param obj
	* @param @return - 设定文件 
	* @return boolean - 返回类型 
	* @throws 
	*/
	public static boolean nullCheck(Object ...obj) {
		for (Object o : obj) {
			if (StringUtils.isEmpty(o)) {
				return true;
			}
		}

		return false;
	}
	
	
	/** 
	* @Title: allNullBeanCheck 
	* @Description: TODO(检查一个bean的属性是否全空) 
	* @param @param obj
	* @param @return - 设定文件 
	* @return boolean - 返回类型 
	* @throws 
	*/
	public static boolean allNullBeanCheck(Object obj) {
		if (nullCheck(obj)) {
			return true;
		}
		
		Class c = obj.getClass();
		
		for (Field f : c.getDeclaredFields()) {
			Object paramValue = getFieldValue(c, obj, f);

			if (!StringUtils.isEmpty(paramValue)) {
				return false;
			}
		}
		
		return true;
	}

	/**
	 * 返回一个Obj中的某个Field的值
	 * @param c
	 * @param obj
	 * @param f
	 * @return
	 */
	public static Object getFieldValue(Class c, Object obj, Field f) {
		if (obj == null || f == null) {
			throw new NullPointerException();
		}

		if (c == null) {
			c = obj.getClass();
		}

		PropertyDescriptor pd = null;
		try {
			pd = new PropertyDescriptor(f.getName(), c);
		} catch (IntrospectionException e) {
			e.printStackTrace();
		}

		if (pd == null) {
			return null;
		}

		// 判断值是否为空
		Object paramValue = null;

		try {
			paramValue = pd.getReadMethod().invoke(obj);
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		}

		return paramValue;
	}

	/** 
	* @Title: nullBeanCheck 
	* @Description: TODO(检查一个bean的属性是否存在空) 
	* @param @param course
	* @param @return - 设定文件 
	* @return boolean - 返回类型 
	* @throws 
	*/
	public static boolean hasNullBeanCheck(Object obj) {
		if (nullCheck(obj)) {
			return true;
		}
		
		Class c = obj.getClass();
		
		for (Field f : c.getDeclaredFields()) {
			Object paramValue = getFieldValue(c, obj, f);

			if (StringUtils.isEmpty(paramValue)) {
				return true;
			}
		}
		
		return false;
	}
}
